﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;
using System.Data;
using ankietyzacja.Dao;

namespace ankietyzacja
{
    public partial class SurveyTemplate : System.Web.UI.Page
    {
        private Int32 AnkietaId;

        protected void Page_Load(object sender, EventArgs e)
        {
            AnkietaId = Int32.Parse(Request.QueryString["ankieta_id"]);

            AnkietaSqlDataSource.SelectParameters["ANKIETA_ID"].DefaultValue = AnkietaId.ToString();
            AnkietaSqlDataSource.UpdateParameters["ANKIETA_ID"].DefaultValue = AnkietaId.ToString();

            PytaniaWAnkiecieSqlDataSource.SelectParameters["ANKIETA_ID"].DefaultValue = AnkietaId.ToString();
            PytaniaWAnkiecieSqlDataSource.InsertParameters["ANKIETA_ID"].DefaultValue = AnkietaId.ToString();


        }

        protected void PytaniaWAnkiecieGridView_RowDataBound(object sender, GridViewRowEventArgs e)
        {

            if (e.Row.RowType == DataControlRowType.DataRow && PytaniaWAnkiecieGridView.EditIndex < 0)
            {
                HiddenField pytanieWAnkiecieId = (HiddenField)e.Row.FindControl("pytanieWAnkiecieIdHiddenField");

                SqlDataSource OdpowiedziNaPytanieSqlDataSource = (SqlDataSource)e.Row.FindControl("OdpowiedziNaPytanieSqlDataSource");

                if (pytanieWAnkiecieId != null)
                {
                    OdpowiedziNaPytanieSqlDataSource.SelectParameters["PYTANIEWANKIECIE_ID"].DefaultValue = pytanieWAnkiecieId.Value;//.e.Row.Cells[0].Text;
                }
            }
        }

        protected void NowePytanieButton_Click(object sender, EventArgs e)
        {
            PytaniaWAnkiecieSqlDataSource.InsertParameters["TRESCPYTANIA"].DefaultValue = NowePytanieTextBox.Text;
            PytaniaWAnkiecieSqlDataSource.InsertParameters["TYPODPOWIEDZI_ID"].DefaultValue = TypNowegoPytaniaDropDownList.SelectedValue;
            PytaniaWAnkiecieSqlDataSource.InsertParameters["NUMERKOLEJNY"].DefaultValue = (PytaniaWAnkiecieGridView.Rows.Count + 1).ToString();

            PytaniaWAnkiecieSqlDataSource.Insert();

            PytaniaWAnkiecieGridView.DataBind();

            NowePytanieTextBox.Text = "";
            TypNowegoPytaniaDropDownList.SelectedValue = "1";

        }


        protected void NowaOdpowiedzNaPytanieButton_Click(object sender, EventArgs e)
        {
            Button button = (Button)sender;

            GridViewRow row = (GridViewRow)button.NamingContainer;

            TextBox nowaOdpowiedzNaPytanieTextBox = (TextBox)row.FindControl("NowaOdpowiedzNaPytanieTextBox");

            GridView odpowiedziNaPytanieGridView = (GridView)row.FindControl("OdpowiedziNaPytanieGridView");

            SqlDataSource OdpowiedziNaPytanieSqlDataSource = (SqlDataSource)row.FindControl("OdpowiedziNaPytanieSqlDataSource");

            HiddenField pytanieWAnkiecieId = (HiddenField)row.FindControl("pytanieWAnkiecieIdHiddenField");

            OdpowiedziNaPytanieSqlDataSource.InsertParameters["TRESCODPOWIEDZI"].DefaultValue = nowaOdpowiedzNaPytanieTextBox.Text;
            OdpowiedziNaPytanieSqlDataSource.InsertParameters["NUMERKOLEJNY"].DefaultValue = (odpowiedziNaPytanieGridView.Rows.Count + 1).ToString();
            OdpowiedziNaPytanieSqlDataSource.InsertParameters["PYTANIEWANKIECIE_ID"].DefaultValue = pytanieWAnkiecieId.Value;//.e.Row.Cells[0].Text;


            OdpowiedziNaPytanieSqlDataSource.Insert();


            odpowiedziNaPytanieGridView.DataBind();

            nowaOdpowiedzNaPytanieTextBox.Text = "";

        }



        protected void OdpowiedzDowolnaButton_Click(object sender, EventArgs e)
        {

            String connectionString = ConfigurationManager.ConnectionStrings["ankietyzacjaConnectionString"].ConnectionString;

            Button button = (Button)sender;

            GridViewRow row = (GridViewRow)button.NamingContainer;

            TextBox odpowiedzDowolnaTextBox = (TextBox)row.FindControl("OdpowiedzDowolnaTextBox");

            SqlConnection connection = new SqlConnection(connectionString);

            HiddenField pytanieWAnkiecieId = (HiddenField)row.FindControl("pytanieWAnkiecieIdHiddenField");

            connection.Open();

         //   String updateOdpowiedzDowolnaSql =
         //"UPDATE ODPOWIEDZDOWOLNA " +
         //" SET NAGLOWEKODPOWIEDZIDOWOLNEJ = @NAGLOWEKODPOWIEDZIDOWOLNEJ " +
         //" WHERE PYTANIEWANKIECIE_ID = @PYTANIEWANKIECIE_ID ";

         //   SqlCommand updateOdpowiedzDowolnaCommand = new SqlCommand(updateOdpowiedzDowolnaSql, connection);
         //   updateOdpowiedzDowolnaCommand.Parameters.Add(new SqlParameter("@NAGLOWEKODPOWIEDZIDOWOLNEJ", odpowiedzDowolnaTextBox.Text));
         //   updateOdpowiedzDowolnaCommand.Parameters.Add(new SqlParameter("@PYTANIEWANKIECIE_ID", pytanieWAnkiecieId.Value));

            AnkietaDao ankietaDao = new AnkietaDao(connection, null);

            if (ankietaDao.updateOdpowiedzDowolna(odpowiedzDowolnaTextBox.Text, Int32.Parse(pytanieWAnkiecieId.Value)) == 0)
            {

                ankietaDao.insertOdpowiedzDowolna(odpowiedzDowolnaTextBox.Text, Int32.Parse(pytanieWAnkiecieId.Value));

             //   String insertOdpowiedzDowolnaSql =
             //"INSERT INTO ODPOWIEDZDOWOLNA " +
             //"   (PYTANIEWANKIECIE_ID,  NAGLOWEKODPOWIEDZIDOWOLNEJ) " +
             //" VALUES (@PYTANIEWANKIECIE_ID, @NAGLOWEKODPOWIEDZIDOWOLNEJ) ";

             //   SqlCommand insertOdpowiedzDowolnaCommand = new SqlCommand(insertOdpowiedzDowolnaSql, connection);
             //   insertOdpowiedzDowolnaCommand.Parameters.Add(new SqlParameter("@NAGLOWEKODPOWIEDZIDOWOLNEJ", odpowiedzDowolnaTextBox.Text));
             //   insertOdpowiedzDowolnaCommand.Parameters.Add(new SqlParameter("@PYTANIEWANKIECIE_ID", pytanieWAnkiecieId.Value));

             //   insertOdpowiedzDowolnaCommand.ExecuteNonQuery();
            }


            connection.Close();

        }



        protected void PytaniaWAnkiecieGridView_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            GridView odpowiedziNaPytanieGridView = (GridView)PytaniaWAnkiecieGridView.Rows[e.RowIndex].FindControl("OdpowiedziNaPytanieGridView");

            foreach (GridViewRow row in odpowiedziNaPytanieGridView.Rows)
            {
                odpowiedziNaPytanieGridView.DeleteRow(row.RowIndex);
            }


        }

        protected void swapRowsOdpowiedzi(object sender, GridViewCommandEventArgs e)
        {

            String connectionString = ConfigurationManager.ConnectionStrings["ankietyzacjaConnectionString"].ConnectionString;

            int rowId = 0;
            int numerKolejny = 0;
            int secondRowId = 0;
            int secondNumerKolejny = 0;

            int odpowiedzNaPytanieId = 0;
            int pytanieWAnkiecieId = 0;

            if (e.CommandName == "OdpowiedzDown" || e.CommandName == "OdpowiedzUp")
            {
                odpowiedzNaPytanieId = Convert.ToInt32(e.CommandArgument);


                SqlConnection connection = new SqlConnection(connectionString);
                SqlTransaction transaction;

                connection.Open();
                transaction = connection.BeginTransaction();

                AnkietaDao ankietaDao = new AnkietaDao(connection, transaction);


                DataTable OdpowiedzDataTable = ankietaDao.loadOdpowiedz(odpowiedzNaPytanieId);

                rowId = (int)OdpowiedzDataTable.Rows[0]["ODPOWIEDZNAPYTANIE_ID"];
                numerKolejny = (int)OdpowiedzDataTable.Rows[0]["NUMERKOLEJNY"];
                pytanieWAnkiecieId = (int)OdpowiedzDataTable.Rows[0]["PYTANIEWANKIECIE_ID"];


                //SqlCommand selectOdpowiedzCommand = new SqlCommand(selectOdpowiedzSql, connection, transaction);
                //selectOdpowiedzCommand.Parameters.Add(new SqlParameter("@ODPOWIEDZNAPYTANIE_ID", odpowiedzNaPytanieId));
                //SqlDataReader selectOdpowiedzReader = selectOdpowiedzCommand.ExecuteReader();
                //while (selectOdpowiedzReader.Read())
                //{
                //    rowId = (int)selectOdpowiedzReader["ODPOWIEDZNAPYTANIE_ID"];
                //    numerKolejny = (int)selectOdpowiedzReader["NUMERKOLEJNY"];
                //    pytanieWAnkiecieId = (int)selectOdpowiedzReader["PYTANIEWANKIECIE_ID"];

                //}
                //selectOdpowiedzReader.Close();

                DataTable sasiedniaOdpowiedz = null;

                if (e.CommandName == "OdpowiedzDown")
                {
                    sasiedniaOdpowiedz = ankietaDao.loadNastepnaOdpowiedz(pytanieWAnkiecieId, numerKolejny);

                }
                if (e.CommandName == "OdpowiedzUp")
                {
                    sasiedniaOdpowiedz = ankietaDao.loadPoprzedniaOdpowiedz(pytanieWAnkiecieId, numerKolejny);
                }

                if (sasiedniaOdpowiedz == null || sasiedniaOdpowiedz.Rows.Count == 0)
                {
                    return;
                }


                //SqlCommand selectSecondOdpowiedzCommand = new SqlCommand(selectSecondOdpowiedzSql, connection, transaction);
                //selectSecondOdpowiedzCommand.Parameters.Add(new SqlParameter("@PYTANIEWANKIECIE_ID", pytanieWAnkiecieId));
                //selectSecondOdpowiedzCommand.Parameters.Add(new SqlParameter("@NUMERKOLEJNY", numerKolejny));

                //SqlDataReader selectSecondOdpowiedzReader = selectSecondOdpowiedzCommand.ExecuteReader();
                //while (selectSecondOdpowiedzReader.Read())
                //{
                secondRowId = (int)sasiedniaOdpowiedz.Rows[0]["ODPOWIEDZNAPYTANIE_ID"];
                secondNumerKolejny = (int)sasiedniaOdpowiedz.Rows[0]["NUMERKOLEJNY"];

                //}
                //selectSecondOdpowiedzReader.Close();

                if (rowId == 0 || secondRowId == 0)
                {
                    return;
                }

                ankietaDao.updateNumerKolejnyOdpowiedzi(rowId, secondNumerKolejny);

                ankietaDao.updateNumerKolejnyOdpowiedzi(secondRowId, numerKolejny);

                //SqlCommand updateOdpowiedzCommand = new SqlCommand(updateOdpowiedzSql, connection, transaction);
                //updateOdpowiedzCommand.Parameters.Add(new SqlParameter("@ODPOWIEDZNAPYTANIE_ID", rowId));
                //updateOdpowiedzCommand.Parameters.Add(new SqlParameter("@NUMERKOLEJNY", secondNumerKolejny));

                //updateOdpowiedzCommand.ExecuteNonQuery();

                //updateOdpowiedzCommand.Parameters.Clear();
                //updateOdpowiedzCommand.Parameters.Add(new SqlParameter("@ODPOWIEDZNAPYTANIE_ID", secondRowId));
                //updateOdpowiedzCommand.Parameters.Add(new SqlParameter("@NUMERKOLEJNY", numerKolejny));

                //updateOdpowiedzCommand.ExecuteNonQuery();

                transaction.Commit();
                connection.Close();

                GridView odpowiedziNaPytanieGridView = (GridView)sender;

                odpowiedziNaPytanieGridView.DataBind();
            }

        }

        protected void swapRowsPytania(object sender, GridViewCommandEventArgs e)
        {

            String connectionString = ConfigurationManager.ConnectionStrings["ankietyzacjaConnectionString"].ConnectionString;

            int rowId = 0;
            int numerKolejny = 0;
            int secondRowId = 0;
            int secondNumerKolejny = 0;

            int pytanieWAnkiecieId = 0;

            int ankietaId = 0;

            if (e.CommandName == "PytanieDown" || e.CommandName == "PytanieUp")
            {
                pytanieWAnkiecieId = Convert.ToInt32(e.CommandArgument);

                SqlConnection connection = new SqlConnection(connectionString);
                SqlTransaction transaction;

                connection.Open();
                transaction = connection.BeginTransaction();

                AnkietaDao ankietaDao = new AnkietaDao(connection, transaction);

                DataTable PytanieDataTable = ankietaDao.loadPytanie(pytanieWAnkiecieId);

                rowId = (int)PytanieDataTable.Rows[0]["PYTANIEWANKIECIE_ID"];
                numerKolejny = (int)PytanieDataTable.Rows[0]["NUMERKOLEJNY"];
                ankietaId = (int)PytanieDataTable.Rows[0]["ANKIETA_ID"];



                DataTable sasiedniePytanie = null;

                if (e.CommandName == "PytanieDown")
                {
                    sasiedniePytanie = ankietaDao.loadNastepnePytanie(ankietaId, numerKolejny);

                }
                if (e.CommandName == "PytanieUp")
                {
                    sasiedniePytanie = ankietaDao.loadPoprzedniePytanie(ankietaId, numerKolejny);
                }

                if (sasiedniePytanie == null || sasiedniePytanie.Rows.Count == 0)
                {
                    return;
                }
                secondRowId = (int)sasiedniePytanie.Rows[0]["PYTANIEWANKIECIE_ID"];
                secondNumerKolejny = (int)sasiedniePytanie.Rows[0]["NUMERKOLEJNY"];


                if (rowId == 0 || secondRowId == 0)
                {
                    return;
                }

                ankietaDao.updateNumerKolejnyPytania(rowId, secondNumerKolejny);

                ankietaDao.updateNumerKolejnyPytania(secondRowId, numerKolejny);

                transaction.Commit();
                connection.Close();

                GridView PytaniaWAnkiecieGridView = (GridView)sender;

                PytaniaWAnkiecieGridView.DataBind();
            }

        }

        protected void GenerujAnkieteButton_Click(object sender, EventArgs e)
        {

            String connectionString = ConfigurationManager.ConnectionStrings["ankietyzacjaConnectionString"].ConnectionString;

            SqlConnection connection = new SqlConnection(connectionString);

            SqlTransaction transaction;

            connection.Open();
            transaction = connection.BeginTransaction();

            AnkietaDao ankietaDao = new AnkietaDao(connection, transaction);

            int AnkietaIdNew = ankietaDao.copyAnkieta(AnkietaId, CzasZyciaCalendar.SelectedDate, false);




            //SqlCommand insertAnkietaCommand = new SqlCommand(insertAnkietaSql, connection, transaction);
            //insertAnkietaCommand.Parameters.Add(new SqlParameter("@ANKIETA_ID", AnkietaId));
            //insertAnkietaCommand.Parameters.Add(new SqlParameter("@CZASZYCIA", CzasZyciaCalendar.SelectedDate));

            //int AnkietaIdNew = System.Convert.ToInt32(insertAnkietaCommand.ExecuteScalar());






    //        String selectPytaniaWAnkiecieSql =
    //" SELECT PYTANIEWANKIECIE_ID FROM PYTANIEWANKIECIE " +
    //     " WHERE ANKIETA_ID = @ANKIETA_ID; ";

    //        SqlCommand selectPytaniaWAnkiecieCommand = new SqlCommand(selectPytaniaWAnkiecieSql, connection, transaction);
    //        selectPytaniaWAnkiecieCommand.Parameters.Add(new SqlParameter("@ANKIETA_ID", AnkietaId));


    //        String insertPytaniaWAnkiecieSql =
    //     "   INSERT INTO PYTANIEWANKIECIE " +
    //     "  ([ANKIETA_ID] " +
    //     "  ,[TRESCPYTANIA] " +
    //     "  ,[TYPODPOWIEDZI_ID] " +
    //     "  ,[NUMERKOLEJNY]) " +
    //" SELECT " +
    //     "   @ANKIETA_ID_NEW " +
    //     "  ,TRESCPYTANIA " +
    //     "  ,TYPODPOWIEDZI_ID " +
    //     "  ,NUMERKOLEJNY " +
    //     " FROM PYTANIEWANKIECIE " +
    //     " WHERE PYTANIEWANKIECIE_ID = @PYTANIEWANKIECIE_ID; " +
    //     " SELECT scope_identity(); ";


//            SqlCommand insertPytaniaWAnkiecieCommand = new SqlCommand(insertPytaniaWAnkiecieSql, connection, transaction);


     //       String insertOdpowiedzNaPytanieSql =
     //     " INSERT INTO ODPOWIEDZNAPYTANIE " +
     //     " ([PYTANIEWANKIECIE_ID] " +
     //     " ,[TRESCODPOWIEDZI] " +
     //     " ,[NUMERKOLEJNY]) " +
     //" SELECT  " +
     //     "  @PYTANIEWANKIECIE_ID_NEW " +
     //     " ,TRESCODPOWIEDZI " +
     //     " ,NUMERKOLEJNY " +
     //     " FROM ODPOWIEDZNAPYTANIE " +
     //     " WHERE PYTANIEWANKIECIE_ID = @PYTANIEWANKIECIE_ID";

     //       SqlCommand insertOdpowiedzNaPytanieCommand = new SqlCommand(insertOdpowiedzNaPytanieSql, connection, transaction);


     //       String insertOdpowiedzDowolnaSql =
     //     " INSERT INTO ODPOWIEDZDOWOLNA " +
     //     " ([PYTANIEWANKIECIE_ID] " +
     //     " ,[NAGLOWEKODPOWIEDZIDOWOLNEJ]) " +
     //" SELECT  " +
     //     "  @PYTANIEWANKIECIE_ID_NEW " +
     //     " ,NAGLOWEKODPOWIEDZIDOWOLNEJ " +
     //     " FROM ODPOWIEDZDOWOLNA " +
     //     " WHERE PYTANIEWANKIECIE_ID = @PYTANIEWANKIECIE_ID";

     //       SqlCommand insertOdpowiedzDowolnaCommand = new SqlCommand(insertOdpowiedzDowolnaSql, connection, transaction);


            DataTable pytaniaWAnkiecieDataTable = ankietaDao.loadPytaniaWAnkiecie(AnkietaId);

//            new SqlDataAdapter(selectPytaniaWAnkiecieCommand).Fill(pytaniaWAnkiecieDataTable);

            


            int PytanieWAnkiecieIdNew;

            foreach (DataRow row in pytaniaWAnkiecieDataTable.Rows)
            {
                PytanieWAnkiecieIdNew = ankietaDao.copyPytanieWAnkiecie(AnkietaIdNew, (Int32)row["PYTANIEWANKIECIE_ID"]);

                //insertPytaniaWAnkiecieCommand.Parameters.Clear();
                //insertPytaniaWAnkiecieCommand.Parameters.Add(new SqlParameter("@PYTANIEWANKIECIE_ID", row["PYTANIEWANKIECIE_ID"]));
                //insertPytaniaWAnkiecieCommand.Parameters.Add(new SqlParameter("@ANKIETA_ID_NEW", AnkietaIdNew));

                //PytanieWAnkiecieIdNew = System.Convert.ToInt32(insertPytaniaWAnkiecieCommand.ExecuteScalar());


                //insertOdpowiedzNaPytanieCommand.Parameters.Clear();
                //insertOdpowiedzNaPytanieCommand.Parameters.Add(new SqlParameter("@PYTANIEWANKIECIE_ID", row["PYTANIEWANKIECIE_ID"]));
                //insertOdpowiedzNaPytanieCommand.Parameters.Add(new SqlParameter("@PYTANIEWANKIECIE_ID_NEW", PytanieWAnkiecieIdNew));
                //insertOdpowiedzNaPytanieCommand.ExecuteNonQuery();

                ankietaDao.copyOdpowiedziNaPytanie(PytanieWAnkiecieIdNew, (Int32)row["PYTANIEWANKIECIE_ID"]);

                ankietaDao.copyOdpowiedzDowolna(PytanieWAnkiecieIdNew, (Int32)row["PYTANIEWANKIECIE_ID"]);


                //insertOdpowiedzDowolnaCommand.Parameters.Clear();
                //insertOdpowiedzDowolnaCommand.Parameters.Add(new SqlParameter("@PYTANIEWANKIECIE_ID", row["PYTANIEWANKIECIE_ID"]));
                //insertOdpowiedzDowolnaCommand.Parameters.Add(new SqlParameter("@PYTANIEWANKIECIE_ID_NEW", PytanieWAnkiecieIdNew));
                //insertOdpowiedzDowolnaCommand.ExecuteNonQuery();
            }

            transaction.Commit();
            connection.Close();

            // Wyświetlenie wygenerowanej ankiety
            Server.Transfer("Survey.aspx?ankieta_id=" + AnkietaIdNew, true);


        }
    }
}